/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package model.gestion_jeu;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Observable;
import model.jeu_de_dame.Piece;

/**
 * <b>Joueur représente un joueur qui possede des pieces dans le jeu de dame.
 * </b>
  * <p>
 * Un joueur est caractérisé par les informations suivantes :
 * <ul>
 * <li>Son nom</li>
 * <li>La partie à laquelle il est en train de jouer</li>
 * <li>Un boolean idiquant si c'est le tour du joueur</li>
 * </ul>
 * </p>
 * @see Partie
 * @author nabil mansouri
 * @version 2.0
 */
public abstract class Joueur extends Observable implements Serializable {
     /**
         * Le nom du joueur
         * 
         * @see Joueur#getNom() 
         */
   protected String nom;
       /**
         * La partie à laquelle le joueur est en train de jouer
         * 
         * @see Joueur#getNom() 
         */
   protected Partie maPartie;
   
       /**
         * Un boolean indiquant si le joueur peut jouer
         * 
         * @see Joueur#isMonTour()  
         */
   protected boolean monTour;
   
            /**
         * Constructeur Joueur.
         * <p>
         * Initialisation du joueur avec son nom et la partie à laquelle il est en trian de jouer.
         * </p>
         * @param p 
         *          la partie en cours
         *@param  nom
         *          le nom du joueur 
         *  
         */
   public Joueur(Partie p, String nom)
   {
       this.nom = nom;
       this.maPartie = p;
       monTour = false;
   }
   
     /**
    * @return Le nom du joueur
     */
   public String getNom()
   {
       return nom;
   }
   

        /**
    * @param b
    *       le boolean indiquant si c'est au tour du joueur de jouer
    * 
     */
   public void setTour(boolean b)
   {
       this.monTour = b;
       this.maj();
   }
   public void maj()
   {
       this.setChanged();
       if(this.countObservers()>0)
           this.notifyObservers();
   }
        /**
    * @return true si c'est le tour du joueur false sinon
     */
   public boolean isMonTour()
   {
       return monTour;
   }
    @Override
         /**
    * @return Le nom du joueur
     */
   public String toString()
   {
       return nom;
   }
    /**
    * @return vrai si le joueur est local
     */
    public boolean isLocal()
    {
        return true;
    }
    
    public int getNbPiece()
    {
        ArrayList<Piece> p = this.maPartie.getPieces(this);
        return p.size();
    }
}
